home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 37
/
Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso
/
Aminet
/
game
/
misc
/
WormWars.lha
/
WormWars
/
Source
/
same.h
< prev
next >
Wrap
Text File
|
2000-04-25
|
14KB
|
394 lines
/* $Filename: WormWars/Source/same.h $
* $VER: WormWars 5.61 $
* $Description: Header file for Worm Wars $
*
* © Copyright 2000 James R. Jacobs.
SAME ON EACH PLATFORM -------------------------------------------------- */
#define elif else if
#define AGLOBAL ; /* global (project-scope) */
#define MODULE static /* external static (file-scope) */
#define PERSIST static /* internal static (function-scope) */
#define AUTO auto /* automatic (function-scope) */
/* miscellaneous */
#define CAUSEWAIT 100
#define DATELENGTH 8 /* DD/MM/YY */
#define TIMELENGTH 5 /* HH:MM */
#define DEFAULTLEVELS 5
#define ENDXPIXEL ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
#define ENDYPIXEL ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
#define FIELDX 52 /* in squares */
#define FIELDY 38 /* in squares */
#define HISCORES 4
#define LIFEMODULO 1000
#define MAXLEVELS 40 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
#define NAMELENGTH 21 /* 0..20 are TEXT, 21 is NULL */
#define NUMKEYS 28
#define PATIENCE 20
#define VERSION "$VER: Worm Wars 5.61 (26.4.00) $"
/* samples */
#define FXGOATFIRE 0
#define FXPROTECTORBORN 1
#define FXTIMEBOMBTICK 2
#define FXGETGROWER 3
#define FXMISSILEACTIVE 4
#define FXGETPOWERUP 5
#define FXUSETELEPORT 6
#define FXWORMDEATH 7
#define FXGETAMMO 8
#define FXEXPLODE 9
#define FXGOATBORN 10
#define FXORBBORN 11
#define FXSHOOT 12
#define FXTITLESCREEN 13
#define FXVICTORY 14
#define FXFILENEW 15
#define FXFILEOPEN 16
#define FXFILESAVE 17
#define FXBOMBBLAST 18
#define FXDEFEAT 19
#define FXENDOFLEVEL 20
#define FXCLICK 21
#define FXUSEARMOUR 22
#define FXGETOBJECT 23
#define FXTIMEALERT 24
#define FXORBSPLIT 25
#define FXORBDEATH 26
#define FXFILESAVEAS 27
#define FXFX 28
#define FXGETNITRO 29
#define FXJUMP 30
#define FX_C 31
#define FX_O 32
#define FX_M 33
#define FX_P 34
#define FX_L 35
#define FX_E 36
#define FX_T 37
#define FXHISCORE 38
#define FXTHUD 39
#define FXGOATDEATH 40
#define FXGETSKULL 41
#define FXUSETONGUE 42
#define FXDRIPBORN 43
#define FXAMIGAN 44
#define FXPAIN 45
#define FXPENGUINBORN 49
#define FXPENGUINDEATH 50
#define FXRUNDOWN 51
#define FXEDITCUT 52
#define FXEDITCOPY 53
#define FXEDITPASTE 54
#define FXLEVELDELETE 55
#define FXCYCLONE 56
#define FXDOGAWAKENS 57
#define FXENCLOSURE 58
#define SAMPLES FXENCLOSURE
#define FXSTAMPED FXBOMBBLAST
#define FXUSEPROTECTOR FXPROTECTORBORN
#define FXDRIP FXFX
/* key types */
#define MOVE 0 /* not AMMO, TRAINER, ONEHUMAN */
#define TRAINER 2 /* not MOVE, AMMO, ONEHUMAN */
#define ONEHUMAN 3 /* not MOVE, AMMO, TRAINER */
/* speeds */
#define VERYFAST 1
#define FAST 2
#define NORMAL 4
#define SLOW 8
#define VERYSLOW 16 /* must be non-0 */
/* The constant NORMAL is used for several purposes:
a) as a speed (therefore must not be VERYFAST, FAST, SLOW
or VERYSLOW);
b) as a blitmode (therefore must not be BLACK or WHITE); and
c) as a pointer (therefore must not be GOLD, SILVER, EMPTY,
WOOD or STONE).
stats */
#define AMMOLIMIT 100
#define BIASLIMIT 100
#define STARTLIVES 100
#define LIVESLIMIT 200
#define MODELIMIT 100
#define MULTILIMIT 8 /* don't set >8! */
#define POWERLIMIT 6
#define SCORELIMIT 999999L
/* Field values...
These are objects. */
#define AFFIXER 0
#define AMMO 1
#define ARMOUR 2
#define BIAS 3
#define BOMB 4
#define BONUS 5
#define CLOCK 6
#define CYCLONE 7
#define GROWER 8
#define HEALER 9
#define ICE 10
#define LIFE 11
#define LIGHTNING 12
#define MAGNET 13
#define MISSILE 14
#define MULTIPLIER 15
#define NITRO 16
#define POWER 17
#define PROTECTOR 18
#define PULSE 19
#define REMNANTS 20
#define SIDESHOT 21
#define SLAYER 22
#define SLOWER 23
#define SWITCHER 24
#define TONGUE 25
#define TREASURE 26
#define UMBRELLA 27
#define LASTOBJECT UMBRELLA
/* These are `empty'. */
#define EMPTY (LASTOBJECT + 1)
#define SILVER (LASTOBJECT + 2)
#define GOLD (LASTOBJECT + 3)
#define FIRSTEMPTY EMPTY
#define LASTEMPTY GOLD
#define LASTGOATFIRE LASTEMPTY
/* Nothing special about the following... */
#define TELEPORT (GOLD + 1)
#define FRAGMENT (GOLD + 2)
#define ORB (GOLD + 3)
#define FIRSTPROTECTOR (GOLD + 4)
#define LASTPROTECTOR (GOLD + 7)
/* Margins indicate `ranges' for:
n: orb bouncing, normal mode.
t: orb bouncing, tongue mode.
a: orb bouncing, armour mode.
g: goats. */
#define GREEN_C (GOLD + 8)
#define RED_O (GOLD + 9)
#define BLUE_M (GOLD + 10)
#define YELLOW_P (GOLD + 11)
#define GREEN_L (GOLD + 12)
#define RED_E (GOLD + 13)
#define BLUE_T (GOLD + 14)
#define YELLOW_E (GOLD + 15)
#define SKULL (GOLD + 16) /* n t a g */
#define SLIME (GOLD + 17) /* [ [ */
#define STONE (GOLD + 18) /* [ [ | | */
#define GOAT (GOLD + 19) /* ] | | | */
#define WOOD (GOLD + 20) /* | ] | */
#define FIRSTTAIL (GOLD + 21) /* | | */
#define LASTTAIL (GOLD + 24) /* ] ] */
#define FIRSTLETTER GREEN_C
#define FIRSTNONE STONE
#define FIRSTTONGUE STONE
#define FIRSTARMOUR SLIME
#define FIRSTGOAT SLIME
#define LASTLETTER YELLOW_E
#define LASTNONE LASTTAIL
#define LASTTONGUE GOAT
#define LASTARMOUR GOAT
#define LASTGOAT LASTTAIL
#define LETTERS (LASTLETTER - FIRSTLETTER)
#define ORBTONGUE (LASTTAIL + 1)
#define ORBARMOUR (LASTTAIL + 2)
#define FIRSTFIRE (LASTTAIL + 3)
#define LASTFIRE (LASTTAIL + 6)
#define FIRSTMISSILE (LASTTAIL + 7)
#define LASTMISSILE (LASTTAIL + 10)
#define START (LASTTAIL + 11)
#define MUSIC (LASTTAIL + 12)
#define FX (LASTTAIL + 13)
#define ZERO (LASTTAIL + 14)
#define TIMEBOMB ZERO
#define ONE (ZERO + 1)
#define TWO (ZERO + 2)
#define HEAD (ZERO + 10)
#define GREENHEADUP HEAD
#define REDHEADUP (HEAD + 1)
#define BLUEHEADUP (HEAD + 2)
#define YELLOWHEADUP (HEAD + 3)
#define FIRSTHEAD GREENHEADUP
#define LASTHEAD YELLOWHEADUP
#define GREENHEADDOWN (HEAD + 4)
#define REDHEADDOWN (HEAD + 5)
#define BLUEHEADDOWN (HEAD + 6)
#define YELLOWHEADDOWN (HEAD + 7)
#define GREENHEADLEFT (HEAD + 8)
#define REDHEADLEFT (HEAD + 9)
#define BLUEHEADLEFT (HEAD + 10)
#define YELLOWHEADLEFT (HEAD + 11)
#define GREENHEADRIGHT (HEAD + 12)
#define REDHEADRIGHT (HEAD + 13)
#define BLUEHEADRIGHT (HEAD + 14)
#define YELLOWHEADRIGHT (HEAD + 15)
#define GREENMODEUP (HEAD + 16)
#define REDMODEUP (HEAD + 17)
#define BLUEMODEUP (HEAD + 18)
#define YELLOWMODEUP (HEAD + 19)
#define GREENMODEDOWN (HEAD + 20)
#define REDMODEDOWN (HEAD + 21)
#define BLUEMODEDOWN (HEAD + 22)
#define YELLOWMODEDOWN (HEAD + 23)
#define GREENMODELEFT (HEAD + 24)
#define REDMODELEFT (HEAD + 25)
#define BLUEMODELEFT (HEAD + 26)
#define YELLOWMODELEFT (HEAD + 27)
#define GREENMODERIGHT (HEAD + 28)
#define REDMODERIGHT (HEAD + 29)
#define BLUEMODERIGHT (HEAD + 30)
#define YELLOWMODERIGHT (HEAD + 31)
#define METAL (HEAD + 32)
#define FIRSTDRIP (HEAD + 33)
#define DRIP FIRSTDRIP
#define LASTDRIP (HEAD + 36)
#define BLACKENED (HEAD + 37)
#define WHITENED (HEAD + 38)
#define PENGUIN (HEAD + 39)
#define WHIRLWIND (HEAD + 40)
#define DOG (HEAD + 41) /* dog chasing */
#define DOGAWAKENING (HEAD + 42)
#define DOGDORMANT (HEAD + 43)
#define CLOUD (HEAD + 44)
#define ARRAYSIZE CLOUD
#define ANYTHING FX
/* These have no imagery. */
#define TEMPTAIL (ARRAYSIZE + 1)
#define TEMPWOOD TEMPTAIL
#define TEMPSLIME TEMPTAIL
#define TEMPLIGHTNING TEMPTAIL
#define TEMPSILVER (ARRAYSIZE + 2)
#define TEMPGOLD (ARRAYSIZE + 3)
#define NOSQUARE (ARRAYSIZE + 4)
/* game status */
#define GAMEOVER 0
#define PLAYGAME 1
#define FIELDEDIT 2
#define TITLESCREEN 3
/* indicator locations */
#define CAUSEYDISTANCE 2 /* distance from centre for cause */
#define LETTERYDISTANCE 3 /* distance from centre for letters */
#define ICONY (FIELDY / 2)
#define MUSICICON (FIELDX + 2)
#define CLOCKICON (FIELDX + 3)
/* control values */
#define NONE 0 /* must be 0 */
#define AMIGA 1
#define HUMAN 2
#define IBMPC AMIGA
/* PROTOTYPES -------------------------------------------------------------
engine.c */
AGLOBAL void clearhiscores(void);
AGLOBAL void enginesetup(void);
AGLOBAL void gameloop(void);
AGLOBAL void levelappend(void);
AGLOBAL void leveldelete(void);
AGLOBAL void levelerase(void);
AGLOBAL void levelinsert(void);
AGLOBAL void matchteleports(void);
AGLOBAL void newfields(void);
AGLOBAL void newgame(void);
AGLOBAL void timeloop(void);
AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler);
AGLOBAL void fillfield(SBYTE which);
AGLOBAL void saylevel(COLOUR colour);
AGLOBAL void setbrush(SBYTE newbrush);
AGLOBAL void train(SCANCODE scancode);
AGLOBAL void updatesquare(SBYTE x, SBYTE y);
AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
AGLOBAL void wormscore(SBYTE player, LONG score);
AGLOBAL SBYTE loadfields(STRPTR pathname);
AGLOBAL SBYTE partner(SBYTE which);
AGLOBAL ABOOL savefields(STRPTR pathname);
AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
AGLOBAL SBYTE xwrap(SBYTE x);
AGLOBAL SBYTE ywrap(SBYTE y);
/* system.c */
AGLOBAL void celebrate(void);
AGLOBAL void clearjoystick(void);
AGLOBAL void clearkybd(void);
AGLOBAL void clearscreen(void);
AGLOBAL void datestamp(void);
AGLOBAL void gameinput(void);
AGLOBAL void hiscores(void);
AGLOBAL void joy0(void);
AGLOBAL void resettime(void);
AGLOBAL void sendreadrequest(void);
AGLOBAL void systemsetup(void);
AGLOBAL void timing(void);
AGLOBAL void titlescreen(void);
AGLOBAL void turborender(void);
AGLOBAL void waitasec(void);
AGLOBAL void cleanexit(SLONG rc);
AGLOBAL void draw(SBYTE x, SBYTE y, SBYTE image);
AGLOBAL void effect(SBYTE index);
AGLOBAL void fileopen(ABOOL revert);
AGLOBAL void filesaveas(ABOOL flag);
AGLOBAL void rundown(SBYTE player);
AGLOBAL void say(STRPTR sentence, COLOUR colour);
AGLOBAL void stat(SBYTE player, SBYTE line);
AGLOBAL void stopfx(void);
AGLOBAL ABOOL anykey(ABOOL timeout);
AGLOBAL ABOOL verify(void);
AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
AGLOBAL ABOOL ZClose(void);
/* PUBLIC STRUCTURES ------------------------------------------------------ */
AGLOBAL struct HiScoreStruct
{ SBYTE player, level;
SLONG score; /* the score itself */
TEXT name[NAMELENGTH + 2]; /* name of the player */
ABOOL fresh; /* is the entry new? */
TEXT date[DATELENGTH + 1], /* date of achievement */
time[TIMELENGTH + 1]; /* time of achievement */
};
AGLOBAL struct TeleportStruct
{ SBYTE x, y;
ABOOL alive;
};
AGLOBAL struct WormStruct
{ SBYTE x, y, deltax, deltay, position, victor, cause,
statx, staty, pos, multi, power, mode, last, levelreached;
ABOOL affixer, remnants, alive, moved, nitro, sideshot;
UBYTE speed, control;
SWORD armour, tongue, ammo, bias, ice, lives;
SLONG score, oldscore, hiscore;
ULONG causewait;
TEXT name[NAMELENGTH + 1];
COLOUR colour;
};
/* Must have blank line at EOF. */